

void crea_shot()
{
     for (int i=0;i<32;i++)                                                      // prepara el array de los shots
    {
       shoty[i][0]=-8; // y   posicion inicial
    }
     Shot.alpha=255;                                                         // fija el nivel de alpha
     Shot.createxturas("sprites/shot.dat");
     Shot.escala=1.4;
} 

/* calc shot positions */ 

int sgn(double value)                                                           // sgn function
{                                                                               // calculate the sing of a double value
 if (value<0)  return -1;                                                       
 if (value>0)  return 1;
 if (value==0) return 0;   
}

void calc_shot(int x1,int y1, int x2, int y2 ,int limit)                                   // limit = limit for shots.
{
 int arraypos;                                                                   // position into array
 for (int i=0;i<limit;i++)
 { 
  if (shoty[i][0]<0) // si es menor de 0 esta libre
   {
    arraypos=i;
    shotcount[i]=0; // resetea el contador.
    break; // sale del bucle
    } 
  if (i==limit-1) return;                                                       // previene que no se escriba siempre sobre la posicion 0   
  }
  if (arraypos>32 )  return;
 /* set variables */ 
 int dx1; int dy1; int dx2; int dy2;
 double m; double n; double u; double v; double s;
 /* init calcs */
 u=x2-x1;v=y2-y1;
 dx1=sgn(u);dy1=sgn(v);dx2=sgn(u);dy2=0;
 m=abs(int(u));n=abs(int(v));
 if (m < n) { dx2 = 0;dy2 = sgn(v);m = abs(int(v));n = abs(int(u)); } 
 s= m / 2;   
 for (int i=0;i<int(m)+500;i++)
 {
  shotx[arraypos][i]=x1;
  //if (x1<0 || x1>video.ancho) break; // para si se sale del mapa
  shoty[arraypos][i]=y1;
  //if (y1<0 || y1>video.alto) break; // para si se sale del mapa
  s = s + n;
  if (s > n) { s=s-m;x1=x1+dx1;y1=y1+dy1; }
   else { x1=x1+dx2;y1=y1+dy2; }
 }  // for
} // end

void enemy_shot(int limit)
{
  static int iTmpshot;                                                      // variable para calcular el tiempo
  int shotdelay=600;
  if ( (SDL_GetTicks() - iTmpshot) < shotdelay)  return;                    // sale si es menor, velocidad de disparo en 350
 iTmpshot = SDL_GetTicks();    

      for (int a=0;a<6;a++)
       {
        if (batss[a].activo==true) 
         calc_shot(int(batss[a].x),int(batss[a].y),int(popolon.x),int(popolon.y),limit);
        if (batss_spr[a].activo==true) 
         calc_shot(int(batss_spr[a].x),int(batss_spr[a].y),int(popolon.x),int(popolon.y),limit);
        if (batss_spl[a].activo==true) 
         calc_shot(int(batss_spl[a].x),int(batss_spl[a].y),int(popolon.x),int(popolon.y),limit); 
        if (batss_zz[a].activo==true) 
         calc_shot(int(batss_zz[a].x),int(batss_zz[a].y),int(popolon.x),int(popolon.y),limit);
        if (bubless[a].activo==true ) // si el sprite esta activo
         calc_shot(bubless[a].x,bubless [a].y,int(popolon.x),int(popolon.y),limit);
        if (bugs[a].activo==true ) 
         calc_shot(bugs[a].x,bugs[a].y,int(popolon.x),int(popolon.y),limit);
       }
}  

void pinta_shot(int limit)
{
  enemy_shot(limit); // first, create shots
  for (int i=0;i<32;i++)
   if (shoty[i][0]>0)                                                           // paint shot if y>0
     {
      
       Shot.x=shotx[i][int(shotcount[i])];                                      // x
       if (Shot.x>video.ancho || Shot.x<0) shoty[i][0]=-8; // set off sprite
       Shot.y=shoty[i][int(shotcount[i])];                                      // y
       if (Shot.y>video.alto || Shot.y<0) shoty[i][0]=-8; // set off sprite
       Shot.pinta(); 
        if (is_game_stop==false) shotcount[i]+=1.5;
       if (shotcount[i] > 3000) shotcount[i]=0;
       /* checkea colisiones */
       if (shield.visible && Shot.collision(&shield.rect))
         {
           Sescudo.play();
           shield_hits+=0.34;                                                   // inc hits
           shoty[i][0]=-8;                                                      // turn sprite off
           shotx[i][0]=-8;                                                      // y
         } // if

       if (Shot.collision(&popolon.rect)) 
         {
          if (is_popolon_fire==true) 
            {
              shoty[i][0]=-8;                                                      // turn sprite off
              shotx[i][0]=-8;           
            }
          if (is_popolon_invisible==false) vidas=6;                             // le quita una vida a popolon
         } // if
     }   
}               
     
